/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.restfb;

import br.great.config.PhotomapConstants;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;

/**
 * 
 * @author Drazzco
 */
public class FacebookToken {
	// Método que chama o Browser e abre uma url específica
	protected static void openUrl(String url) {
		String os = System.getProperty("os.name");
		Runtime runtime = Runtime.getRuntime();
		try {
			// Block for Windows Platform
			if (os.startsWith("Windows")) {
				String cmd = "rundll32 url.dll,FileProtocolHandler " + url;
				Process p = runtime.exec(cmd);
			}
			// Block for Mac OS
			else if (os.startsWith("Mac OS")) {
				Class fileMgr = Class.forName("com.apple.eio.FileManager");
				Method openURL = fileMgr.getDeclaredMethod("openURL",
						new Class[] { String.class });
				openURL.invoke(null, new Object[] { url });
			}
			// Block for UNIX Platform
			else {
				String[] browsers = { "firefox", "opera", "konqueror",
						"epiphany", "mozilla", "netscape" };
				String browser = null;
				for (int count = 0; browser == null; count++)
					if (runtime.exec(new String[] { "which", browsers[count] })
							.waitFor() == 0)
						browser = browsers[count];
				if (browser == null)
					throw new Exception("Could not find web browser");
				else
					runtime.exec(new String[] { browser, url });
			}
		} catch (Exception x) {
			System.err.println("Exception occurd while invoking Browser!");
			x.printStackTrace();
		}
	}

	// Método que abre uma página do facebook para a app JLP e guarda o
	// código de verificação em Token.txt
	public static void firstAccess(String name) throws IOException {
		PrintStream ps = TokenFile.selectTextWrite(name);
		System.out.println(PhotomapConstants.OPENBROWSERWARNING);
		openUrl("https://www.facebook.com/dialog/oauth?" +
				"client_id=168581516526484&" +
				"redirect_uri=http://www.facebook.com/connect/login_success.html&" +
				"scope=publish_stream,offline_access,create_event,read_friendlists,manage_friendlists,user_notes,friends_notes,user_photos,friends_photos,user_events,friends_events,user_birthday,friends_birthday");
		InputStreamReader inputStreamReader = new InputStreamReader(System.in);
		BufferedReader reader = new BufferedReader(inputStreamReader);
		// Depois de logar no facebook e permitir a app, copie e cole a url que
		// aparecer
		// Operações feitas no próprio browser(logar no facebook e permitir a
		// app)
		System.out.println(PhotomapConstants.PASTEURL);
		String url = reader.readLine();
		URL aURL = new URL(url);
		// Copiando somente o código de verificação da url para Token.txt
		ps.println(aURL.getQuery());
		ps.close();
	}

	// Método que pega o código de verificação guardado em Token.txt e
	// o transforma no Token de acesso.
	// Usado como método de segurança para que o Token de acesso não fique
	// guardado em Token.txt
	public static String accessToken(String sc) throws MalformedURLException, IOException {
		URL face = new URL("https://graph.facebook.com/oauth/access_token?" +
				"client_id=168581516526484&" +
				"redirect_uri=http://www.facebook.com/connect/login_success.html&" +
				"client_secret=23b68e9f648dd8da70acadd869154e6e&" + sc);
		BufferedReader in = new BufferedReader(new InputStreamReader(face.openStream()));
		String inputline = in.readLine();
		in.close();
		// Excluindo a parte "access_token=" e deixando somente a chave
		String[] at1 = inputline.split("(?<=\\G.{1})");
		int at2 = at1.length;
		String access_token = at1[13];
		for (int i = 14; i < at2; i++) {
			access_token += at1[i];
		}
		return access_token;

	}

}
